package tg.game.lottery.crawler;

import java.text.ParseException;
import java.util.List;
import java.util.Map;

import org.nutz.dao.Dao;
import org.nutz.http.Http;
import org.nutz.http.Response;
import org.nutz.ioc.Ioc;
import org.nutz.ioc.impl.NutIoc;
import org.nutz.ioc.loader.combo.ComboIocLoader;
import org.nutz.log.Log;
import org.nutz.log.Logs;

import com.alibaba.druid.util.StringUtils;

import tg.game.util.timeline.IntervalTask;
import tg.game.util.timeline.TimeLine;

/**
 * 彩票抓奖爬虫
 * @author NKW
 *  最多定义三个不同的网页来爬
 *  一个缓存来处理爬到的东西：缓存在内存，更新插入到数据库
 */
public class LotteryCrawler {
	public static int INTERVAL = 3000;//默认间隔3秒
	
	

    private final static String URL1 = "http://e.apiplus.net/curly.do?token=t95d1a49393c8c2b0k&format=json";
	private final static String URL2 = "http://z.apiplus.net/curly.do?token=t95d1a49393c8c2b0k&format=json";
	
	public LotteryCrawler(Dao dao) {
		
		
		LotteryCache lotteryCache = new LotteryCache(dao);
		CrawlerTask.setLotteryCache(lotteryCache);//设定缓存器，所有任务只要设定一次，因为是静态的，而且缓存只能有一个
		
		LotteryParser parser = new OpenCaiLotterParser();//开彩网的解析器
		
		CrawlerTask task1 = new CrawlerTask(
				"opencai抓奖_收费"  //任务名称
				,INTERVAL          //默认间隔
				,1                 //绑定第几个奖（只有1/2/3）
				);
		task1.setUrlInfo("http://e.apiplus.net/curly.do?token=t95d1a49393c8c2b0k&format=json"//主网址
				        ,"http://z.apiplus.net/curly.do?token=t95d1a49393c8c2b0k&format=json");//备用网址，也可以用null,不带备用的，就不会切换
		task1.setParser(parser);//设定解析器
		task1.setNextExecTime(System.currentTimeMillis() + 1000);//1秒后开始
		task1.setTaskCompleteInterval(true);//任务结束 后再间隔，不是固定 间隔
		TimeLine.addTask(task1);//加入时间线
        //----------------------------------------------------------------------------------------------------------

		LotteryParser freeParser = new OpenCaiFreeLotterParser();//开彩网免费的解析器
		CrawlerLinkedTask.setLotteryCache(lotteryCache);//设定缓存器，所有任务只要设定一次，因为是静态的，而且缓存只能有一个
		CrawlerLinkedTask task2 = new CrawlerLinkedTask(
				"opencai抓奖_重庆时时彩_免费"
				,INTERVAL
				,2
				);//直接用环形链表来做
		task2.setUrlInfo("http://f.apiplus.net/cqssc-1.json",null);
		task2.setParser(freeParser);
		task2.setNextExecTime(System.currentTimeMillis() + 1000);//1秒后开始
		
		task2.copyAndNext("opencai抓奖_北京pk10_免费", "http://f.apiplus.net/bjpk10-1.json", null)
		.copyAndNext("opencai抓奖_重庆幸运农场_免费", "http://f.apiplus.net/cqklsf-1.json", null)
		.copyAndNext("opencai抓奖_广东快乐十分_免费", "http://f.apiplus.net/gdklsf-1.json", null)
		.copyAndNext("opencai抓奖_天津快乐十分_免费", "http://f.apiplus.net/tjklsf-1.json", null)
		.copyAndNext("opencai抓奖_广西快乐十分_免费", "http://f.apiplus.net/gxklsf-1.json", null)
		.copyAndNext("opencai抓奖_福彩时时乐_免费", "http://f.apiplus.net/shssl-1.json", null)
		.copyAndNext("opencai抓奖_天津时时彩_免费", "http://f.apiplus.net/tjssc-1.json", null)
		.copyAndNext("opencai抓奖_北京快乐8_免费", "http://f.apiplus.net/bjkl8-1.json", null)
		.copyAndNext("opencai抓奖_江苏骰宝_免费", "http://f.apiplus.net/jsk3-1.json", null)
		.copyAndNext("opencai抓奖_广东十一选五_免费", "http://f.apiplus.net/gd11x5-1.json", null)
		.copyAndNext("opencai抓奖_江西十一选五_免费", "http://f.apiplus.net/jx11x5-1.json", null)
		.copyAndNext("opencai抓奖_山东十一选五_免费", "http://f.apiplus.net/sd11x5-1.json", null)
		.copyAndNext("opencai抓奖_幸运飞艇_免费", "http://f.apiplus.net/mlaft-1.json", null)
		.copyAndNext("opencai抓奖_福彩3D_免费", "http://f.apiplus.net/fc3d-1.json", null)
		.copyAndNext("opencai抓奖_体彩P3_免费", "http://f.apiplus.net/pl3-1.json", null)
		.setNext(task2);//最后形成闭环
		

		TimeLine.addTask(task2);//最后头节点开始执行，会不断的循环每个节点，一直循环下去
		//-------------------------------------------------------------------------------------------------
	}
	

	public static Ioc ioc ; 
	public final static Log log = Logs.get();
	public static void main(String[] args) {
		try {
			ioc = new NutIoc(new ComboIocLoader("*org.nutz.ioc.loader.json.JsonLoader", "ioc/", 
					"*org.nutz.ioc.loader.annotation.AnnotationIocLoader","game.com.model"));
			 
		} catch (ClassNotFoundException e) {
			log.error("初始化Ioc出错", e);
		} 
//		new LotteryCrawler(ioc.get(Dao.class));
		new LotteryCrawler(ioc.get(Dao.class, "dao1"));
	}
}
